<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>1.Set类型与Array与Object对比分析</title>
</head>

<body>
  <script>
    // Object类型的声明和赋值
    let obj = {};
    obj.name = "张三";
    console.log(obj.name); //张三

    // Array类型的声明和赋值
    let arr = [];
    arr.push(1, 2, 3, 4, 4, 3, 2, 1);
    console.log(arr);// (8) [1, 2, 3, 4, 4, 3, 2, 1]

    // Set类型的声明和赋值,其中set里面的值不会重复
    let set = new Set();
    set.add(1);
    set.add(1); // 重复元素不会被加入
    set.add(2);
    set.add("1");// 类型严格 String和Number不是相同类型，可以添加
    
    console.log(set); // Set(2) {1, 2,'1'}

    // set初始化可以传数组
    set= new Set([1,2,3,4,5,1]);  // Set(5) {1, 2, 3, 4, 5} 
    console.log(set); 
    // 对象相关知识点
    // 对象的属性名都是字符串类型的，使用Number类型会自动转为字符串类型
    obj = {
      1: "hdcms",
      "1": "houdunren.com"
    }
    // 第一个1会被转成字符串，属性名和第二个属性重复，第二个回你覆盖第一个
    console.log(obj);//{1: 'houdunren.com'}
    let hd = {
      obj: "后盾人" //此处的obj就是字符串，和上面的obj对象没关系
    }
    // 因为obj在对象中会被解析成字符串，所以直接调用hd.obj 即可获得属性
    console.log(hd.obj);// 后盾人 
    // 使用对象作为属性名，因为对象不能直接作为属性名，它需要被转成字符串
    // 可以使用[]包裹对象，将对象的内容转成字符串
    // 获得对象属性的值的时候，也要将对象转成字符串才能获取
    hd = {
      [obj]: "houdunren"
    }
    console.log(hd); //[object Object]: 'houdunren'}
    console.log(hd[obj.toString()]);// houdunren
    console.log(hd["[object Object]"]);// houdunren

  </script>
</body>

</html>